
/* 一、引入模块依赖 */
const fs = require('fs');
const path = require('path');
const jwt = require('jsonwebtoken');

/* 二、生成token */
function generateToken(data) {
    let created = Math.floor(Date.now() / 1000); // 创建token生成的时间（s）
    let cert = fs.readFileSync(path.join(__dirname, './private.pem')); //私钥路径 
    let token = jwt.sign({
        data,
        exp: created + 60 * 60*24, // 生成后1天后失效，3600秒=1小时，*24就是一天
    }, cert, { algorithm: 'RS256' });
    return token;
    //
}

/* 三、校验token */
function verifyToken(token) {
    let cert = fs.readFileSync(path.join(__dirname, './public.pem')); //公钥路径
    let res;
    try {
        if (token !== undefined) {
            let result = jwt.verify(token, cert, { algorithms: ['RS256'] }) || {};
            res = result.data || {};
        }
    } catch (e) {
        //
        res = e;
    }
    return res;
}

/* 导出生成和校验token的方法 */
module.exports = { generateToken, verifyToken };

/* 别的文件使用

*/














// 创建 token 类
// class Jwt {
//     constructor(data) {
//         this.data = data;

//     }

//     //生成token
//     generateToken() {
//         let data = this.data;
//         // 创建token生成的时间（s）
//         let created = Math.floor(Date.now() / 1000);
//         let cert = fs.readFileSync(path.join(__dirname, './private.pem'));//私钥 可以自己生成
//         let token = jwt.sign({
//             data,
//             /* 生成后1小时失效 */
//             exp: created + 60 * 60,
//         }, cert, {algorithm: 'RS256'});
//         return token;
//     }

//     // 校验token
//     verifyToken() {
//         let token = this.data;
//         let cert = fs.readFileSync(path.join(__dirname, './public.pem'));//公钥 可以自己生成
//         let res;
//         try {
//             let result = jwt.verify(token, cert, {algorithms: ['RS256']}) || {};
//             let {exp = 0} = result, current = Math.floor(Date.now() / 1000);
//             if (current <= exp) {
//                 res = result.data || {};
//             }
//         } catch (e) {
//             res = 'err';
//         }
//         return res;
//     }
// }

// module.exports = Jwt;

